import fs from 'fs'
import path from 'path'

/**
 * 创建文件
 * @param absFilePath 文件绝对路径
 * @param content 内容
 */
export function createFile(absFilePath: string, content = '') {
  if (mkdirSync(path.dirname(absFilePath))) {
    fs.writeFileSync(absFilePath, content)
  }
}

/**
 * 读取文件内容为字符串
 * @param absFilePath 文件路径
 */
export function readFileContent(absFilePath: string) {
  return fs.readFileSync(absFilePath).toString()
}

/**
 * 创建目录
 * @param dir 目录径路
 */
export function mkdirSync(dir: string) {
  if (fs.existsSync(dir)) {
    return true
  } else {
    if (mkdirSync(path.dirname(dir))) {
      fs.mkdirSync(dir)
      return true
    }
  }
  return false
}

/**
 * 删除目录
 * @param dir 目录路径
 */
export const removeDirSync = (dir: string) => {
  if (!fs.existsSync(dir)) {
    return
  }
  const files = fs.readdirSync(dir)
  for (const file of files) {
    const newPath = path.join(dir, file)
    const stat = fs.statSync(newPath)
    if (stat.isDirectory()) {
      // 如果是文件夹就递归下去
      removeDirSync(newPath)
    } else {
      // 删除文件
      fs.unlinkSync(newPath)
    }
  }
  // 如果文件夹是空的，就将自己删除掉
  fs.rmdirSync(dir)
}

/**
 * 复制目录、文件
 * @param sourcePath 源路径
 * @param targetPath 目标路径
 */
export function copyFileOrDir(sourcePath: string, targetPath: string) {
  const stat = fs.statSync(sourcePath)
  if (stat.isFile()) {
    createFile(targetPath)
    fs.copyFileSync(sourcePath, targetPath)
  } else if (stat.isDirectory()) {
    fs.readdirSync(sourcePath, { withFileTypes: true }).forEach(file => {
      copyFileOrDir(path.resolve(sourcePath, file.name), path.resolve(targetPath, file.name))
    })
  }
}
